package com.color.admin.common.core.annotation;


import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * @author HaiQiu
 * @date 2021/12/24
 * jpa自定义查询注解
 */
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Query {

    /**
     * 基本对象属性名
     * @return 对象名
     */
    String propName() default "";

    /**
     * 查询方式
     * @return 默认等于
     */
    Type type() default Type.EQUAL;

    /**
     * 连接表查询的对象名 如User类中的role
     * @return 连接查询表名
     */
    String joinName() default "";

    /**
     * 连接方式 默认左连接
     * @return 连接方式
     */
    Join join() default Join.LEFT;

    /**
     * 多字段模糊搜索，仅支持String类型字段，多个用逗号隔开, 如@Query(blurry = "email,username")
     * @return 多字段模糊搜索
     */
    String blurry() default "";

    enum Type {
        //小于
        LESS_THAN_NQ,
        //包含
        IN,
        //不等于
        NOT_EQUAL,
        //不在里面
        NOT_IN,
        //在...之间
        BETWEEN,
        //不为空
        NOT_NULL,
        //为空
        IS_NULL,
        //等于
        EQUAL,
        //大于等于
        GREATER_THAN,
        //小于等于
        LESS_THAN,
        //中模糊查询
        INNER_LIKE,
        //左模糊查询
        LEFT_LIKE,
        //右模糊查询
        RIGHT_LIKE
    }

    /**
     * 适用于简单连接查询，复杂的请自定义该注解，或者使用sql查询
     */
    enum Join{
        //左连接
        LEFT,
        //右连接
        RIGHT,
        //内连接
        INNER
    }

}
